import CryptoJS from 'crypto-js'

// 加密密钥，建议使用环境变量或配置文件存储
const SECRET_KEY = 'your-secret-key-7a-blog'

/**
 * 加密数据
 * @param data 要加密的数据
 * @returns 加密后的字符串
 */
export const encryptData = (data: any): string => {
  // 将数据转换为JSON字符串
  const dataStr = typeof data === 'string' ? data : JSON.stringify(data)
  // 使用AES加密
  return CryptoJS.AES.encrypt(dataStr, SECRET_KEY).toString()
}

/**
 * 解密数据
 * @param encryptedData 加密后的字符串
 * @returns 解密后的数据
 */
export const decryptData = (encryptedData: string): any => {
  try {
    // 解密
    const bytes = CryptoJS.AES.decrypt(encryptedData, SECRET_KEY)
    // 转换为原始字符串
    const decryptedStr = bytes.toString(CryptoJS.enc.Utf8)

    // 尝试解析JSON，如果失败则返回原始字符串
    try {
      return JSON.parse(decryptedStr)
    } catch (jsonError) {
      return decryptedStr
    }
  } catch (error) {
    console.error('解密失败:', error)
    return null
  }
}

/**
 * 从localStorage获取并解密用户信息
 * @returns 用户信息对象或null
 */
export const getUserInfo = (): any => {
  const encryptedInfo = localStorage.getItem('u_info_enc')
  if (!encryptedInfo) return null

  return decryptData(encryptedInfo)
}
